Onion skin animation platform and time bar tool

ABSTRACT

A system includes hardware processor(s), an HMD, an input device, and an onion skin animation module. The animation modules is configured to receive a character rig of a 3D character, receive a first 3D animation of the 3D character, the first 3D animation defines a motion sequence of the 3D character based on the character rig, create a virtual time bar within the virtual environment, the virtual time bar displaying a timeline associated with the first 3D animation, identify a first animation time within the first 3D animation, the first animation time is a point in time during the motion sequence, create a first pose object of the 3D character in the virtual environment, pose the first pose object based on the first 3D animation at the animation time, and positioning the first pose object within the virtual environment proximate the first animation time on the virtual time bar.

RELATED APPLICATIONS

This application claims the benefit of priority to U.S. ProvisionalPatent Application Ser. No. 62/232,309, filed Sep. 24, 2015, hereinincorporated by reference in its entirety.

TECHNICAL FIELD

The subject matter disclosed herein generally relates to the technicalfield of special-purpose machines that facilitate 3-dimensional (3D)animation, including software-configured computerized variants of suchspecial-purpose machines and improvements to such variants, and to thetechnologies by which such special-purpose machines become improvedcompared to other special-purpose machines that facilitate 3D animation.Specifically, the present disclosure addresses systems and methods tofacilitate software tools for use in developing 3D characters using avirtual reality (VR) onion animation tool.

BACKGROUND

Existing technology for creating 3D animation uses character rigsmanipulated in list views by animators. These character rigs generallyinclude a skeleton attached to a 3D mesh with the skeletons havingjoints that can be manipulated to create motion. The joints aretypically displayed in a listview and can be manipulated eitherindividually or in a group. One method used by animators to view thedynamic progression of an animation is to use ghosting techniques. Inthis technique an animation is displayed at various timeframes wherebyonly an outline of the animated body is shown for each timeslot.Displaying successive onion skins gives the impression of motion to theviewer. Working with onion skins can be difficult, and particularly whenworking in a two-dimensional (2D) interface, where 3 spatial dimensionsand time are being compressed into a 2D space. Existing onion skin toolsare often limited in what they can show since most of the animations areclose to each other and become very crowded. This technical problem ofhow to render and present 3D objects that change in time to users on a2D interface (e.g., a display screen) becomes more acute in VRenvironments where list views are even more problematic since text ismore difficult to read and the condensed nature of list views makes themhard to interact with within a natural user interface (NUI).

BRIEF DESCRIPTION OF THE DRAWINGS

Various ones of the appended drawings merely illustrate exampleembodiments of the present disclosure and cannot be considered aslimiting its scope, and in which:

FIG. 1 is a diagram of an example HMD worn by a user;

FIG. 2 is a component diagram of an example onion skin animation system(or just “animation system”) that includes components similar to the HMDshown in FIG. 1;

FIG. 3 illustrates example inputs and outputs of the onion skinanimation module;

FIG. 4 is a diagram of an example virtual environment presented to theuser by the animation module;

FIG. 5 illustrates various example object manipulations being performedby the user on the pose objects of an animation for a character (e.g., ahumanoid character) using an animation timeline view provided by theanimation module;

FIG. 6 illustrates an example operations performed on the time bar inthe virtual environment;

FIGS. 7A and 7B illustrate timeline scrolling operations that allow theuser to scroll through the animation within the interactive timeline;

FIGS. 8A-8C illustrate the user creating an animation in a virtualenvironment using an interactive timeline;

FIG. 9 illustrates a small screen interface provided by the animationmodule in the virtual environment that may be used to modify theinteractive timeline;

FIG. 10 illustrates an example computer-implemented method for providingthe interactive timeline platform;

FIG. 11 is a block diagram illustrating a representative softwarearchitecture, which may be used in conjunction with various hardwarearchitectures described herein to provide the VR tools and developmentenvironment described herein; and

FIG. 12 is a block diagram illustrating components of a machine,according to some example embodiments, able to read instructions from amachine-readable medium (e.g., a machine-readable storage medium) andperform any one or more of the VR methodologies discussed herein.

It will be noted that throughout the appended drawings, like featuresare identified by like reference numerals.

In the description below, the term “module” refers broadly to software,hardware, or firmware (or any combination thereof) components. Modulesare typically functional components that can generate useful data orother output using specified input(s). A module may or may not beself-contained. An application program (also called an “application”)may include one or more modules, or a module can include one or moreapplication programs.

DETAILED DESCRIPTION

The description that follows describes systems, methods, techniques,instruction sequences, and computing machine program products thatconstitute illustrative embodiments of the disclosure. In the followingdescription, for the purposes of explanation, numerous specific detailsare set forth in order to provide an understanding of variousembodiments of the inventive subject matter. It will be evident,however, to those skilled in the art, that embodiments of the inventivesubject matter may be practiced without these specific details.

The systems and methods described herein provide solutions to many ofthe challenges facing 3D animators (“users”). An onion skin animationsystem and methods are described herein. In many of the exampleembodiments described herein, the onion skin animation system leveragesVR during animation creation and editing. For example, the user may weara head mounted display (HMD) and may operate one or more hand-heldtracking input devices to interact with the animation system, allowingthe user to experience the animation system via VR. While the primaryexamples of the animation system are described within the context of aVR environment, the animation system may also be used in augmentedreality (AR) environments. VR, AR, and to some extent the associatedhardware devices, allow time, space, and animations to be viewed in newways when compared to conventional display devices such as computerscreens. In order to take advantage of this, the animation systempresents an open and visual timeline-based view for creating andmodifying 3D animations (e.g., for a particular object). This opentimeline-based view utilizes the available viewing space within a VRenvironment to display multiple timeline views in an interactive,organized, and logical way, and allows the user to interact with theseviews within the VR environment.

The animation system also allows the user to work in an immersiveenvironment where the 3D objects can be life-sized. The large relativesize of objects allows the user to more easily interact with them withina more natural user interface (e.g., as compared to a conventional 2Ddisplay). The animation system may be used for 3D character design andanimation. Many of the examples provided herein use humanoid charactersas animation objects. However, it should be understood that theanimation system is applicable to the animation of any 3D object (e.g.,regardless of shape or skeletal composition). The animation system mayaccept as input animation files or animation rigs for 3D objects, withor without a mesh (e.g., skin).

FIG. 1 is a diagram of an example HMD 102 worn by a user 100. In theexample embodiment, the user 100 (e.g., a game developer or game player)experiences a virtual environment (e.g., via VR) or augmented reality(AR) content while wearing the HMD 102. The HMD 102 includes a visor 108having two display devices (e.g., one for each eye), a centralprocessing unit (CPU) 104, a graphical processing unit (GPU) 106, andearphone speakers 109. The display device(s) may include one or moreopaque display surfaces (e.g., providing VR content, or a completevisual experience for the user 100), or the display device(s) mayinclude one or more semi-opaque or clear display surfaces (e.g.,providing AR content to the user 100). In some embodiments, the visor108 may include a single display device (e.g., split for both eyes). TheHMD 102 also includes one or more camera devices 110 configured tocapture real-world digital video around the user 100 (e.g., a field ofview, a peripheral view, or a 360° view around the user 100). The cameradevices 110 may be used to capture the real world environment around theuser 100, thereby allowing the HMD 102 to provide that content as a partof a VR environment (e.g., a mixed AR/VR environment) displayed to theuser 100. In some embodiments, the HMD 102 may be similar to virtualreality HMDs such as the Oculus Rift®, The HTC Vive®, The PlaystationVR®, and the like.

In some embodiments, the user 100 also holds a pair of handheld trackingdevices (“handhelds”) (not shown), one in each hand. The handheldsprovide information about the absolute or relative position andorientation of a user 100's hands and, as such, are capable of capturinghand gesture information. The handhelds may be configured to operatedirectly with the HMD 102 (e.g., via wired or wireless communication).In some embodiments, the handhelds may be Oculus Touch® handcontrollers, HTC Vive® hand trackers, or Playstation VR® handcontrollers. The handhelds may also include one or more buttons orjoysticks built into the handheld.

In other embodiments, the user 100 may wear one or more wearable handtracking devices (e.g., motion tracking gloves, not shown), such asthose made commercially available by Manus VR (Netherlands). In stillother embodiments, hand motion of the user 100 may be tracked without,or in addition to, the handhelds or wearable hand tracking devices via ahand position sensor (not shown, e.g., using optical methods to trackthe position and orientation of the user 100's hands) such as, forexample, those made commercially available by Leap Motion, Inc. (aCalifornia corporation). Such hand tracking devices (e.g., handhelds)track the position of one or more of the hands of the user 100 duringoperation.

FIG. 2 is a component diagram of an example onion skin animation system(or just “animation system”) 200 that includes components similar to theHMD 102 shown in FIG. 1. The onion skin animation system 200 includes aVR interaction device 202, a VR display device 204, and one or more VRinput devices 206. In some embodiments, the VR display device 204 may besimilar to the visor 108, and the VR input device(s) 206 may be similarto the handhelds or other tracking devices described above in referenceto FIG. 1. In the example embodiment, the VR interaction device 202includes a memory 220, one or more CPUs 222, and one or more GPUs 224.In some embodiments, the CPU 222 may be similar to the CPU 104, the GPU224 may be similar to the GPU 106, and the VR interaction device 202 maybe a part of the HMD 102.

In the example embodiment, the VR interaction device 202 includes a VRengine 212 (e.g., a game engine), executed by the CPU 222 or GPU 224,that provides a virtual environment through the VR display device 204(e.g., to the user 100). The VR engine 212 includes an onion skinanimation module (or just “animation module”) 210 implemented within, orotherwise in communication with, the VR engine 212. In some embodiments,the virtual environment provided by the VR engine 212 or the animationmodule 210 may be a virtual world associated with a computer game (e.g.,a VR development environment for creating 3D objects used in thecomputer game). For example, a developer may utilize the virtualenvironment for creation and editing of 3D objects and their associatedanimations.

The animation module 210 and the VR engine 212 includecomputer-executable instructions residing in the memory 220 that areexecuted by the CPU 222 or the GPU 224 during operation. The VR engine212 communicates with the VR display device 204 (e.g., the HMD 102) andalso with other VR hardware such as the VR input device(s) 206 (e.g.,motion capture devices such as the handhelds). The animation module 210may be integrated directly within the VR engine 212, or may beimplemented as an external piece of software (e.g., a plugin).

In some embodiments, the animation system 200 and the various associatedhardware and software components described herein may provide AR contentinstead of, or in addition to, VR content. It should be understood thatthe systems and methods described herein may be performed with ARcontent and, as such, the scope of this disclosure covers both AR and VRapplications. Further, while many of the examples provided hereindescribe the user 100 operating within a virtual environment as adeveloper (e.g., editing the virtual world for later presentation to aplayer via a gaming engine), it should be understood that the 3D objectsand associated animations, so constructed, may later be presented toplayers via a conventional 2D or 3D display.

FIG. 3 illustrates example inputs and outputs of the onion skinanimation module 210. In the example embodiment, the animation module210 utilizes a 3D animation rig 302 (e.g., for a 3D character) and a 3Danimation 304. The 3D animation rig 302 may be, for example, a simpleskeleton without a mesh, or a full rig including skeleton and mesh. The3D animation 304 may include model data, rigging data, and animationdata (e.g., a character rig (or skeleton), animation data for thecharacter rig, and a background). The animation data may be in anyformat known to those skilled in the art that enables the systems andmethods described herein. Using the 3D animation rig 302 and the 3Danimation 304, the animation module 210 generates a modified animation306. The modified animation 306 may be an animation in any format knownto those skilled in the art that enables the systems and methodsdescribed herein. In some embodiments, only the animation rig 302 isused by the animation module 210, and the user 100 generates a newanimation as an output of the animation module 210.

In the example embodiment, the animation module 210 displays nobackground for the animation. In some embodiments, the animation module210 may present a single, static background (e.g., to give context to a3D object). In other embodiments, the animation module 210 may allow theuser 100 to toggle a background on and off (e.g., giving context to the3D object when desired by the user 100).

During operation, the user 100 may, for example, modify the 3D animation304 by changing poses of the 3D object at points during the animation304 (e.g., making changes in rig math associated with the animation304). The animation module 210 provides a virtual environment and toolsto facilitate various user-implemented changes, as well as automaticchanges made by the animation module 210 based on thoseusers-implemented changes. When the user 100 is finished makingmodifications, the animation module 210 may generate the modifiedanimation 306 (e.g., saving the updated animation with updated rig mathin an animation file format).

FIG. 4 is a diagram of an example virtual environment 400 presented tothe user 100 by the animation module 210. In the example embodiment, theuser 100 is editing the 3D animation 304 for a 3D object, a character402. As shown in FIG. 4, the animation module 210 presents a userinterface within the virtual environment 400 (e.g., a “developmentenvironment”). The virtual environment 400 includes an interactivetimeline platform 410 of a section of animation for the character 402.The interactive timeline platform 410 includes a time bar 412 andmultiple pose objects 414 of the character 402. Each pose object (orjust “pose”) 414 is a virtual object of the 3D character representing apose of the character at particular time within the animation. In someembodiments, the time bar 412 displays time in standard units of time(e.g., hours, minutes, seconds, and so forth). In other embodiments, thetime bar 412 may be displayed in units other than time, such asanimation frame numbers or the like.

To create the pose objects 414, in the example embodiment, the animationmodule 210 reads an animation file (e.g., the 3D animation 304) andconstructs a virtual object for the character 402 at various points intime (e.g., the pose objects 414). In other embodiments, the animationmodule 210 may read the animation file and display the poses 414 asdifferent camera views of the character rendered at different times(e.g., placing mesh colliders at rig points in 3D space).

Each displayed pose 414 of the character 402 on the time bar 412corresponds with a point in time (an “animation time”) 416, or a framenumber, with the adjacent poses 414 of the character 402 being eitherjust forward in time or just backward in time. In the example shown inFIG. 4, the animation module 210 displays the character 402 at eightanimation times 416, where each of the eight poses 414 corresponds toone of the animation times 416. More specifically, each animation time416 is defined at an animation increment on the time bar 412 between 6.0seconds (s) and 7.4 s of the animation, where the animation increment inthis example is 0.2 s. In other embodiments, the animation increment maybe non-linear, irregular, or pre-defined (e.g., by the user 100, or bythe 3D object asset). This view of the animation allows the user 100 tosimultaneously see displays of the character 402 at various times withinthe animation. In some embodiments, each displayed object (e.g., at eachof the animation times 416) corresponds with a keyframe for thedisplayed animation.

In the example embodiment, the interactive timeline platform 410includes a group of objects within the virtual environment 400. In someembodiments, the interactive timeline platform 410 may be scaled in size(e.g., relative to the user 100), (e.g., life-size, for animation ofhuman-like objects). The user 100 may walk around the platform 410within the virtual environment 400 to see it from different perspectivesand can walk up to the display and interact with any object within it.The user 100 may interact with objects within the interactive timelineplatform 410, such as the time bar 412, or any of the individual poses414 of the character 402 shown at each particular animation time 416.Interacting with any one of the pose objects 414 may cause modificationsto the adjacent poses 414. The animation module 210 detects variousinteractions with a pose object 414 and calculates alterations to theadjacent poses 414. The animation module 210 then updates the adjacentposes 414 accordingly.

FIG. 5 illustrates various example object manipulations being performedby the user 100 on pose objects 504A-D (collectively, pose objects 504)of an animation for a character 502 (e.g., a humanoid character) usingan interactive timeline platform 510 provided by the animation module210. In the example embodiment, the animation module 210 has created thefour pose objects 504A-D in a virtual environment 500 at animation times506A-D (collectively, animation times 506, e.g., at times t=6.0 s, 6.4s, 6.8 s, and 7.2 s), respectively, on a time bar 508. In someembodiments, the virtual environment 500 may be similar to the virtualenvironment 400, the character 502 may be similar to the character 402,the pose objects 504 may be similar to the poses 414, the animationtimes 506 may be similar to the animation times 416, the time bar 508may be similar to the time bar 412, and the platform 510 may be similarto the interactive timeline platform 410.

In the example embodiment, the illustrated animation is being created oredited by the user 100 to form a forward movement animation (e.g., themodified animation 306) for the character 502. In this example, the poseobjects 504C is manipulated by the user 100 within the virtualenvironment 500 (e.g., using the VR input device(s) 206, as illustratedby a virtual hand 520). More specifically, the user 100 manipulates theswinging of an arm 516 (e.g., the left arm) of the character 502 at theanimation time 506C, t=6.8 s. In each pose 504, the character 502initially has the arm 516 at an initial position 512, illustrated inbroken line. During the example manipulation operation, the user 100moves the arm 516 from the initial position 2 to an updated position514C. Updated positions 514 are illustrated in solid line, and themanipulation operation and subsequent modifications are illustrated asan unnumbered arrow pointing from the initial position 512 to theupdated position 514 in each pose 504.

For example, in the animation shown in FIG. 4, the arm 516 of thecharacter 502 is swinging, and the user 100 wishes to modify theswinging. The user 100 approaches the platform 510 within the virtualenvironment 500 near one of the pose objects 504 (e.g., pose object504C) and uses the virtual hand 520 to virtually move the arm 516 fromthe initial position 512C of the pose object 504C to the updatedposition 514C. The user 100 may perform this operation via a VR controldevice that detects (e.g., tracks) hand movements of the user 100's realhand (e.g., the VR input devices 206). For example, the user 100 maygrasp (e.g., grab and hold) the arm 516 at the initial position 512C androtate the arm 516 to the desired position, releasing the arm 516 whenit is at the updated position 514C. In some embodiments, grabbing andmoving the arm 516 includes grabbing and manipulating colliders. Themovement may be restricted by limitations imposed by the 3D object(e.g., the 3D animation rig 302 for the character 502).

In the example embodiment, the original movement operations performed onthe pose objects 504 are constrained according to animation restraints.Animation restraints may be imposed on the 3D object (e.g., thecharacter 502 and associated pose objects 504) by the animation module210, by the VR engine 212, or by animation restraints within the 3Dobject rigging or animation (e.g., rigging relationships that link oneor more of the poses 504). The animation restraints may, for example,ensure that the hierarchy and rules of motion for joints of thecharacter 502 are respected across frames as the user 100 moves the arm516. For example, as the user 100 moves the arm 516 from the initialposition 512D to the updated position 514D at the animation time 506D,t=7.2 s, the animation module 210 uses the animation restraints todetermine how the arm 516 is postured at the updated position 514D. Theanimation restraints may modify any aspect of the arm 516 including, forexample, position, rotation, flexion, and extension of any joint therein(e.g., according to the 3D animation rig 302 associated with thecharacter 502). The animation restraints may also govern movement ofother parts of the object (e.g., shoulder, head) in response to theoriginal movement operation (e.g., to maintain anatomical integrity). Insome embodiments, the user 100 may modify those animation restraints. Insome embodiments, the animation module 210 various rig points associatedwith the animation rig 304 as glowing points (e.g., on the pose object504C).

In the example embodiment, after the user 100 moves the arm 516associated with the pose object 504C at the animation time 506C, t=6.8s, the animation module 210 may perform transition modifications,updating one or more nearby poses based on the original movementoperation. After a movement operation, the animation module 210 may“smooth” positions of the arm 516 in the frames before or after theanimation time 506C. For example, presume that, just prior to theexample movement operation illustrated on the pose object 504C, the arm516 at the animation time 506B, t=6.4 s, is at initial position 512B,and the arm 516 at the animation time 506C, t=6.8 s, is at the initialposition 512C. It should be noted that there may be many poses (e.g.,for many frames) between animation times t=6.4 s and 6.8 s (not shown),each of which may be modified by a similar transition modification.

When the user 100 performs this example movement operation on the poseobject 504C, if left unadjusted, the arm 516 of the character 502 mayappear to “jerk” up into the updated position 514C from the frame justpreceding the animation time 506C (e.g., where the arm 516 is still inapproximately the initial position 512C). This sudden movement may causethe animation of the character 502 to appear unnatural.

To combat this effect, in the example embodiment, the animation module210 performs transition modifications on nearby frames. Transitionmodifications are modifications of neighboring frames to smoothtransitions of the arm 516 based on the original movement operation. Theanimation module 210 determines which part or parts of the pose object504C were moved by the original modification operation (e.g.,manipulations done on the rig colliders) (just the arm 516, in thisexample), and these parts may be changed with transition modifications.

In some embodiments, the animation module 210 may propagate transitionmodifications into the future or past, from the animation time at whichthe original movement operation was performed. The animation module 210may use a damping function that limits the propagation of changes to theneighboring frames. The damping could be a function of the amount ofmovement imparted by the user 100; for example, a large modification bythe user 100 could propagate farther (e.g., to more adjacent frames)than a small modification. Further, the number of frames into the futureor past updated with transition modifications may be determined based onthe animation restraints.

For example, in response to the original movement operation at theanimation time 506C, t=6.8 s, the animation module 210 may propagatetransition modifications into the past by moving the arm 516 at theanimation times 506A, 506B, and may propagate transition modificationsinto the future by moving the arm 516 at the animation time 506D. Morespecifically, the animation module 210 may move the arm 516 at theanimation time 506B, t=6.4 s, from an initial position 512B to anupdated position 514B, where the initial and updated positions 512A,514A may be dependent on the animation restraints, as well as on theoriginal movement operation. Two frames away, the animation module 210may move the arm 516 at the animation time 506A, t=6.0 s, from aninitial position 512A to an updated position 514A, where the initial andupdated positions are dependent on the animation restraints, as well ason the original movement operation or the preceding transitionmodifications. The damping function can cause the animation module 210to create a smaller movement for the arm 516 at the animation time 506A,t=6.0 s than for the arm 516 at the animation time 506B, t=6.4 s basedon temporal difference with the object of the original movementoperation. Similarly, the animation module 210 may move the arm 516 atthe animation time 506D, t=7.2 s, from an initial position 512D to anupdated position 514D. While only one forward frame (at t=7.2 s) and twobackward frames (at t=6.0 s and t=6.4 s) are shown to be modified inFIG. 5, it should be understood that there may be additional framesbetween each pair of animation times 506, and that the animation module210 may similarly propagate transition modifications to those unseenframes.

The transition modifications may be performed automatically (e.g., aftera movement operation), or may be performed in response to a request fromthe user 100. In some embodiments, the transition modifications may beinfluenced by the animation restraints. For example, in someembodiments, as the arm 516 at the animation time 506C, t=6.8 s, ismoved, the arm 516 for the pose objects 504A, 504B, and 504D atanimation times t=6.0 s, t=6.4 s, and t=7.2 s, respectively, may all beupdated simultaneously, and according to the animation restraints.

In some embodiments, the animation module 210 may create multiplevirtual objects at each animation time 506 on the platform 510 (e.g.,the pose objects 504 for the character 502, plus perhaps other poseobjects for another character in the animation). In some embodiments,the background for each frame may also be displayed. In someembodiments, only one background is displayed in the virtual environment500 at any given moment. That background may be chosen by the user 100,or may be automatically determined by the animation module 210 (e.g.,using the background associated with the pose object 504C based on themost recent focus of the user 100 being on the pose object 504C).

FIG. 6 illustrates an example operation performed on the time bar 412 inthe virtual environment 400. In the example embodiment, the time bar 412may be modified by the user 100 to compress or expand a region of time(e.g., including multiple animation times 416). The user 100 mayinitiate a compression operation in the virtual environment 400 bypinching a set of frames (e.g., with their fingers or hands, or viaanother VR control device). For example, if the user 100 wants tocompress a region of time, then the user 100 performs a compressiongesture such as, for example, grabbing the two frames at the edges ofthe region (e.g., a first timebar marker 610 at animation time t=7.0 sand a second timebar marker 612 at animation time t=6.6 s) and squeezethe timebar markers together. In some embodiments, to generate thetimebar markers 610, 612, the user 100 may grab the pose object 414associated with the animation time t=7.0 s with one hand and the poseobject 414 associated with the animation time t=6.6 s with the otherhand. In other embodiments, the user 100 may touch a point on the timebar 412 with one finger (e.g., at time t=7.0 s) and touch another pointon the time bar 412 with another finger (e.g., at time t=6.6 s). The twotimebar markers 610, 612 define a compressed region 620 between timet=6.6 s and t=7.0 s. This example compression gesture is one way inwhich the user 100 may initiate a compression operation. It should beunderstood that other gestures which identify a region of time, or twoanimation times within the animation, may be used to initiate acompression operation.

In the example shown in FIG. 6, the compressed region 620 is shownalready compressed. A compressed pose object 604 for the compressedregion 620 is different from the other displayed pose objects 414, thusproviding a visual indication that the compressed region 620 isdifferent than the other frames shown on the time bar. In the exampleembodiment, the compressed pose object 604 is displayed using a ghostingview, where several pose objects 414 representing the compressed framesare turned partially transparent and superimposed on one another. Asillustrated here, a right arm 602 of the character 402 is swingingduring the animation, while the rest of the character 402 remainsstationary. The arm movement of the character 402 from multiple framesis superimposed to form the compressed pose object 604. Morespecifically, there are three superimposed arm positions 606A, 606B, and606C displayed on the compressed pose object 604, one for each animationtime 416 within the compressed region 620. The arm position 606Arepresents the position of the arm 602 at time t=6.6 s, the arm position606B represents the position of the arm 602 at time t=6.8 s, and the armposition 606C represents the position of the arm 602 at time t=7.0 s. Insome embodiments, the compressed pose object 604 in the compressedregion 620 may be displayed in a different color from the remainder ofthe displayed pose object 414.

In the example embodiment, the compressed region 620 provides a break inthe time bar 412, thereby allowing the time increment to be differentwithin the compressed region 620. Further, the time bar 412 alsoprovides a visual indicator that the compressed pose object 604represents a range of time rather than just one point in time (e.g.,illustrated by a rectangle 622 highlighting the start time (t=6.6 s) andend time (t=7.0 s) of the compressed region 620).

In some embodiments, the time bar 412 may be divided into differentincrement ranges. For example, the time increment before the compressedregion 620 may be 0.4 seconds, and the time increment after thecompressed region 620 may be 3 seconds. In some embodiments, theseregional time increments may be adjusted by the user 100, or by theanimation module 210.

In the example embodiment, the user 100 may initiate an expansionoperation. In some embodiments, the expansion operation may be performedon an already-compressed region such as the compressed region 620. Forexample, the user 100 may approach the compressed region 620 and make aseparation gesture with their two hands (e.g., the hands startingtogether and pulling apart, as a person would open dual sliding doors).The separation gesture may be performed on the compressed pose object604, or on the time bar 412 (e.g., on the rectangle 622, or using thetimebar markers 610, 612). In response to the separation gesture, theanimation module 210 may expand the compressed pose object 604 out intoany or all of the pose objects from which it was built (e.g., the poseobjects at times t=6.6 s, 6.8 s, and 7.0 s).

In some embodiments, the expansion operation may be performed on anuncompressed pose object, such as the pose objects 504C. For example,the user 100 may perform the separation gesture on the pose object 504C,or on the time bar 508 at the animation time 506C, t=6.8 s. In responseto the separation gesture, the animation module 210 may construct poseobjects neighboring the pose object 504C (e.g., similar to the originalobject creation process used for creating the interactive timelineplatform 510). In other words, the animation module 210 may beginbuilding pose objects 504 just before and just after the animation time506C. For example, the animation module 210 may create pose objects attimes t=6.7 s and t=6.9 s. In some embodiments, the animation module 210creates one or more new pose objects 504 at pre-determined distancesbetween the selected animation time (e.g., animation time 506C) and theanimation time preceding or succeeding the selected animation time(e.g., animation times 506B or 506D, respectively). In some embodiments,the farther the user 100 extends their hands during the separationgesture, the more granular the expansion gets, and the more expansionpose objects the animation module 210 creates.

FIGS. 7A and 7B illustrate timeline scrolling operations that allow theuser 100 to scroll through the animation within the interactive timelineplatform 410. In some embodiments, the interactive timeline platform 410may show an entire animation (e.g., from beginning to end). In theexample embodiments shown in FIGS. 7A and 7B, the interactive timelineplatform 410 shows only a portion of an animation. The portion of thesequence shown on the platform 410 starts at an animation start time 710and ends at an animation end time 712, thereby defining a timelinerange.

In the example embodiment shown in FIG. 7A, the timeline range isbetween t=6.0 s and t=7.4 s, with a consistent 0.2 s animationincrement. Further, in this example, the user 100 performs a timelinescrolling operation that moves the timeline range displayed on theinteractive timeline platform 410. To initiate a scroll operation, theuser 100 performs a scroll gesture on the interactive timeline platform410 within the virtual environment 400. In some embodiments, the scrollgesture may include grabbing a pose object (e.g., a pose object 702G)with the virtual hand 520 and moving the virtual hand 520 to the rightor left. In some embodiments, the scroll gesture may include swiping thevirtual hand 520 to the left or to the right on the time bar 412, orgrabbing and throwing the pose object 702 to the left or the right,thereby causing the time bar 412 to ‘fly’ by the stationary user 100 andland in a new time position (e.g., with a new timeline range).

In this example, the user 100 grabs the pose object 702G with thevirtual hand 520 (e.g., as shown in FIG. 7A) and moves the virtual hand520 to the right. As the user 100 moves the virtual hand 520, theanimation module 210 shifts the time bar 412 to the right, along withall of the pose objects 702 and associated animation times 416. As theanimation times 416 and their associated pose objects 702 reach theright edge of the interactive timeline platform 410, the animationmodule 210 removes the associated pose object 702 from the interactivetimeline platform 410. Further, the animation module 210 also adds a newpose object 702 onto the opposite end of the interactive timelineplatform 410, as this new animation time 416 “comes into view” (e.g., asthe next time increment is exposed). For example, the first pose object702 to get removed during this scroll operation is the pose object 702A,at animation time 416 t=6.0 s. When the animation module 210 removes thepose object 702A from the right end of the interactive timeline platform410, the animation module 210 also adds the next pose object 702J, andassociated animation time 416 at t=7.6, to the opposite end. Thisprocess continues until the user 100 ceases the scrolling operation, oruntil the scrolling operation otherwise stops.

FIG. 7B illustrates the results of this example scrolling operation. Inthis example, the user 100 stopped the scrolling operation by releasingthe pose object 702G where shown. As such, the pose objects 702A-C wereremoved during the scrolling operation, and pose objects 702J-L wereadded. Further, the timeline range has changed during the process. Atthe end of the scrolling operation, the timeline range rests at t=6.6 sto 8.0 s.

As such, the user 100 may scroll through the animation using thescrolling gesture, and may similarly scroll in either direction (e.g.,either forward in time by gesturing toward the right, or backward intime by gesturing toward the left).

FIGS. 8A-8C illustrate the user 100 creating an animation in a virtualenvironment 800 using an interactive timeline platform 810. FIG. 8Aillustrates an initial step of the animation creation process. In theexample embodiment, the interactive timeline platform 810 starts with asingle 3D object, such as a pose object 804A of a character 802, or the3D animation rig 302. The pose object 804A is positioned at an animationtime 806A, t=0.0, on a time bar 812. In some embodiments, the character802 may be similar to the character 402, the interactive timelineplatform 810 may be similar to the interactive timeline platform 410,the time bar 812 may be similar to the time bar 412, and the poseobjects 804 may be similar to the pose objects 504. The user 100 thenadds frames (e.g., before or after, to increase the length of theanimation) using an animation extension operation.

FIG. 8B illustrates an example animation extension operation performedby the user 100 using the platform 810. The user 100 uses the virtualhand 520 to initiate the animation extension operation by performing ananimation extension gesture. More specifically, and in the exampleembodiment, the animation extension gesture includes the user 100grabbing the initial pose object 804A and pulling the initial poseobject 804A to the left along the time bar 812 (e.g. in a positive timedirection). In response to the animation extension gesture, theanimation module 210 adds new pose objects 804B, 804C, and 804D to theleft of the initial pose object 804A, thereby increasing the length ofthe animation. More specifically, the animation module 210 adds new poseobjects 804 at each animation interval of the time bar 812, based on thelength of the dragging performed by the user 100. In this example, theanimation interval is 0.2 units and the user 100 drags the initial poseobject 804A to just past the 0.6 unit mark on the time bar 812. As such,the animation module 210 creates the new pose object 804B at ananimation time 806B, the new pose object 804C at an animation time 806C,and the new pose object 804D at an animation time 806D. In someembodiments, the animation module 210 creates and displays the new poseobjects 804B-D while the user 100 is performing the animation extensiongesture (e.g., as the virtual hand 520 passes each successive animationinterval). In other embodiments, the animation module 210 creates all ofthe new pose objects 804B-D once the user 100 has completed theanimation extension gesture. In the example embodiment, the animationinterval is a pre-determined value, such as 0.2 units. In someembodiments, the user 100 may input or alter the animation interval.Initially, the new pose objects 804B-D are copies of the initial poseobject 804A.

FIG. 8C illustrates the user 100 performing a movement operation on anarm 816 of the pose object 804D. In response to the movement operation,the animation module 210 performs transition manipulations on each ofthe pose objects 804A-C, as described above with respect to FIGS. 8A-C.It should be understood that, while the example in FIG. 8 shows onlyfour pose objects, the animation module 210 may create multiple poses ofthe character 802 each pair of animation times 806.

FIG. 9 illustrates a small screen interface 902 provided by theanimation module 210 in the virtual environment 400 that may be used tomodify the interactive timeline platform 410. In the example embodiment,the small screen interface 902 allows the user 100 to modify aspects ofthe interactive timeline platform 410, including the time bar 412 andthe pose objects 414. The small screen interface 902 floats in thevirtual environment 400 and stays with the user 100 (e.g., within acertain distance) as the user 100 moves through the virtual environment400. In some embodiments, the small screen interface 902 may be used toperform any of the operations for the interactive timeline platform 410described herein. The small screen interface 902 may be used to directlymodify the properties of the interactive timeline platform 410 tonavigate and display any portion of the animation. For example, thesmall screen interface 902 can be used to modify the start time, endtime, animation interval, or timeline range of the time bar 412,compress or expand regions, scroll the time bar 412, and so forth. Aschanges are made via the small screen interface 902, the animationmodule 210 updates the full scale interactive timeline platform 410 inthe virtual environment 400 based on the changes made. The small screeninterface 902 may be used to play and stop the animation, to move theuser 100 to another point in time within the animation, or to collapseor expand any series of frames. The small screen interface 902 may alsodisplay additional information (e.g., in text format) regarding theanimation. The small screen interface 902 may be closed by the user 100if no longer needed.

FIG. 10 illustrates an example computer-implemented method 1000 forproviding the interactive timeline platform 410. Thecomputer-implemented method 1000, hereafter referred to as “the method1000,” is performed by a computing device comprising at least onehardware processor and a memory. In the example embodiment, the method1000 includes receiving a character rig of a three-dimensional (3D)character (see operation 1010). The method also includes receiving afirst 3D animation of the 3D character, the first 3D animation defines amotion sequence of the 3D character based at least in part on thecharacter rig (see operation 1020).

In the example embodiment, the method 1000 further includes creating avirtual time bar within a virtual environment, the virtual time bardisplaying a timeline associated with the first 3D animation, thevirtual environment is displayed to a user wearing a head mounteddisplay (HMD) (see operation 1030). The method 1000 also includesidentifying a first animation time within the first 3D animation, thefirst animation time is a point in time during the motion sequence (seeoperation 1040). The method 1000 also includes creating a first poseobject of the 3D character in the virtual environment (see operation1050). The method 1000 further includes posing the first pose object inthe virtual environment based on the first 3D animation at the animationtime (see operation 1060). The method 1000 also includes positioning thefirst pose object within the virtual environment proximate the firstanimation time on the virtual time bar (see operation 1070).

In some embodiments, the method 1000 also includes receiving indicationof a movement operation associated with the first pose object, themovement operation is performed by the user in the virtual environment,the move operation includes the user moving a component of the firstpose object, and automatically altering a pose of a second pose objectwithin the virtual environment based at least in part on the movementoperation.

In some embodiments, the virtual environment includes a second poseobject positioned proximate a second animation time on the virtual timebar, the second pose object is in a pose different than different thanthe first pose object, AND the method 1000 also includes receivingindication of a compression gesture performed by the user in the virtualenvironment using an input device, the compression gesture identifiesthe first animation time and the second animation time, the input deviceis configured to allow the user to interact with virtual objectspresented in the virtual environment, and reducing the first pose objectand the second pose object into a single, compressed pose object withinthe virtual environment, the compressed pose object displays at least adifference between the pose of the first pose object and the pose of thesecond pose object.

In some embodiments, the method further includes receiving indication ofa scrolling gesture performed by the user in the virtual environmentusing an input device, the scrolling gesture includes (1) one of (a)grabbing the first pose object and (b) pressing a point on the time barand (2) gesturing to one of the left and the right with the inputdevice, the input device is configured to allow the user to interactwith virtual objects presented in the virtual environment, andsimultaneously moving the first pose object and the time bar to the oneof the left and the right.

In some embodiments, the method 1000 further includes receivingindication of an animation extension gesture performed by the user inthe virtual environment using an input device, the animation extensiongesture includes grabbing the first pose object and gesturing to one ofthe left and the right with the input device, the input device isconfigured to allow the user to interact with virtual objects presentedin the virtual environment, and creating a second pose object within thevirtual environment in response to the animation extension gesture.

In some embodiments, the method 1000 further includes generating amodified 3D animation based at least in part on the first pose object,the modified 3D animation is different than the first 3D animation. Insome embodiments, the method 1000 further includes determining a secondanimation time based on the first animation time and a pre-determinedanimation increment, creating a second pose object of the 3D characterin the virtual environment, and positioning the second pose objectwithin the virtual environment proximate the second animation time onthe virtual time bar.

The examples of how to use the interactive timeline platform 410 areshown to illustrate the systems and methods described herein, andassociated benefits. Such examples of use should not be construed to belimitations on the logical process embodiments, nor should variations ofuser interface methods from those described herein be considered outsidethe scope of the present disclosure.

Certain embodiments are described herein as including logic or a numberof components, modules, or mechanisms. Modules may constitute eithersoftware modules (e.g., code embodied on a machine-readable medium) orhardware modules. A “hardware module” is a tangible unit capable ofperforming certain operations and may be configured or arranged in acertain physical manner. In various example embodiments, one or morecomputer systems (e.g., a standalone computer system, a client computersystem, or a server computer system) or one or more hardware modules ofa computer system (e.g., a processor or a group of processors) may beconfigured by software (e.g., an application or application portion) asa hardware module that operates to perform certain operations asdescribed herein.

In some embodiments, a hardware module may be implemented mechanically,electronically, or any suitable combination thereof. For example, ahardware module may include dedicated circuitry or logic that ispermanently configured to perform certain operations. For example, ahardware module may be a special-purpose processor, such as aField-Programmable Gate Array (FPGA) or an Application SpecificIntegrated Circuit (ASIC). A hardware module may also includeprogrammable logic or circuitry that is temporarily configured bysoftware to perform certain operations. For example, a hardware modulemay include software executed by a general-purpose processor or otherprogrammable processor. Once configured by such software, hardwaremodules become specific machines (or specific components of a machine)uniquely tailored to perform the configured functions and are no longergeneral-purpose processors. It will be appreciated that the decision toimplement a hardware module mechanically, in dedicated and permanentlyconfigured circuitry, or in temporarily configured circuitry (e.g.,configured by software) may be driven by cost and time considerations.

Accordingly, the phrase “hardware module” should be understood toencompass a tangible entity, be that an entity that is physicallyconstructed, permanently configured (e.g., hardwired), or temporarilyconfigured (e.g., programmed) to operate in a certain manner or toperform certain operations described herein. As used herein,“hardware-implemented module” refers to a hardware module. Consideringembodiments in which hardware modules are temporarily configured (e.g.,programmed), each of the hardware modules need not be configured orinstantiated at any one instance in time. For example, where a hardwaremodule comprises a general-purpose processor configured by software tobecome a special-purpose processor, the general-purpose processor may beconfigured as respectively different special-purpose processors (e.g.,comprising different hardware modules) at different times. Softwareaccordingly configures a particular processor or processors, forexample, to constitute a particular hardware module at one instance oftime and to constitute a different hardware module at a differentinstance of time.

Hardware modules can provide information to, and receive informationfrom, other hardware modules. Accordingly, the described hardwaremodules may be regarded as being communicatively coupled. Where multiplehardware modules exist contemporaneously, communications may be achievedthrough signal transmission (e.g., over appropriate circuits and buses)between or among two or more of the hardware modules. In embodiments inwhich multiple hardware modules are configured or instantiated atdifferent times, communications between such hardware modules may beachieved, for example, through the storage and retrieval of informationin memory structures to which the multiple hardware modules have access.For example, one hardware module may perform an operation and store theoutput of that operation in a memory device to which it iscommunicatively coupled. A further hardware module may then, at a latertime, access the memory device to retrieve and process the storedoutput. Hardware modules may also initiate communications with input oroutput devices, and can operate on a resource (e.g., a collection ofinformation).

The various operations of example methods described herein may beperformed, at least partially, by one or more processors that aretemporarily configured (e.g., by software) or permanently configured toperform the relevant operations. Whether temporarily or permanentlyconfigured, such processors may constitute processor-implemented modulesthat operate to perform one or more operations or functions describedherein. As used herein, “processor-implemented module” refers to ahardware module implemented using one or more processors.

Similarly, the methods described herein may be at least partiallyprocessor-implemented, with a particular processor or processors beingan example of hardware. For example, at least some of the operations ofa method may be performed by one or more processors orprocessor-implemented modules. Moreover, the one or more processors mayalso operate to support performance of the relevant operations in a“cloud computing” environment or as a “software as a service” (SaaS).For example, at least some of the operations may be performed by a groupof computers (as examples of machines including processors), with theseoperations being accessible via a network (e.g., the Internet) and viaone or more appropriate interfaces (e.g., an Application ProgrammingInterface (API)).

The performance of certain of the operations may be distributed amongthe processors, not only residing within a single machine, but deployedacross a number of machines. In some example embodiments, the processorsor processor-implemented modules may be located in a single geographiclocation (e.g., within a home environment, an office environment, or aserver farm). In other example embodiments, the processors orprocessor-implemented modules may be distributed across a number ofgeographic locations.

The modules, methods, applications and so forth described in conjunctionwith FIGS. 1-10 are implemented in some embodiments in the context of amachine and an associated software architecture. The sections belowdescribe representative software architecture(s) and machine (e.g.,hardware) architecture(s) that are suitable for use with the disclosedembodiments.

Software architectures are used in conjunction with hardwarearchitectures to create devices and machines tailored to particularpurposes. For example, a particular hardware architecture coupled with aparticular software architecture will create a mobile device, such as amobile phone, tablet device, or so forth. A slightly different hardwareand software architecture may yield a smart device for use in the“internet of things,” while yet another combination produces a servercomputer for use within a cloud computing architecture. Not allcombinations of such software and hardware architectures are presentedhere, as those of skill in the art can readily understand how toimplement the systems and methods described herein in different contextsfrom this disclosure.

FIG. 11 is a block diagram 1100 illustrating a representative softwarearchitecture 1102, which may be used in conjunction with varioushardware architectures described herein to provide the VR tools anddevelopment environment described herein. FIG. 11 is merely anon-limiting example of a software architecture, and it will beappreciated that many other architectures may be implemented tofacilitate the functionality described herein. The software architecture1102 may be executing on hardware such as a machine 1200 of FIG. 12 thatincludes, among other things, processors 1210, memory 1230, and I/Ocomponents 1250. A representative hardware layer 1104 is illustrated andcan represent, for example, the machine 1200 of FIG. 12. Therepresentative hardware layer 1104 comprises one or more processingunits 1106 having associated executable instructions 1108. Theexecutable instructions 1108 represent the executable instructions ofthe software architecture 1102, including implementation of the methods,modules and so forth of FIGS. 1-10. Hardware layer 1104 also includesmemory or storage modules 1110, which also have the executableinstructions 1108. The hardware layer 1104 may also comprise otherhardware 1112, which represents any other hardware of the hardware layer1104, such as the other hardware illustrated as part of the machine1200.

In the example architecture of FIG. 11, the software architecture 1102may be conceptualized as a stack of layers where each layer providesparticular functionality. For example, the software architecture 1102may include layers such as an operating system 1114, libraries 1116,frameworks/middleware 1118, applications 1120, and a presentation layer1144. Operationally, the applications 1120 or other components withinthe layers may invoke application programming interface (API) calls 1124through the software stack and receive a response, returned values, andso forth illustrated as messages 1126 in response to the API calls 1124.The layers illustrated are representative in nature and not all softwarearchitectures have all layers. For example, some mobile or specialpurpose operating systems may not provide a frameworks/middleware 1118layer, while others may provide such a layer. Other softwarearchitectures may include additional or different layers.

The operating system 1114 may manage hardware resources and providecommon services. The operating system 1114 may include, for example, akernel 1128, services 1130, and drivers 1132. The kernel 1128 may act asan abstraction layer between the hardware and the other software layers.For example, the kernel 1128 may be responsible for memory management,processor management (e.g., scheduling), component management,networking, security settings, and so on. The services 1130 may provideother common services for the other software layers. The drivers 1132may be responsible for controlling or interfacing with the underlyinghardware. For instance, the drivers 1132 may include display drivers,camera drivers, Bluetooth® drivers, flash memory drivers, serialcommunication drivers (e.g., Universal Serial Bus (USB) drivers), Wi-Fi®drivers, audio drivers, power management drivers, and so forth dependingon the hardware configuration.

The libraries 1116 may provide a common infrastructure that may beutilized by the applications 1120 or other components or layers. Thelibraries 1116 typically provide functionality that allows othersoftware modules to perform tasks in an easier fashion than to interfacedirectly with the underlying operating system 1114 functionality (e.g.,kernel 1128, services 1130 or drivers 1132). The libraries 1116 mayinclude system libraries 1134 (e.g., C standard library) that mayprovide functions such as memory allocation functions, stringmanipulation functions, mathematic functions, and the like. In addition,the libraries 1116 may include API libraries 1136 such as medialibraries (e.g., libraries to support presentation and manipulation ofvarious media format such as MPEG4, H.264, MP3, AAC, AMR, JPG, PNG),graphics libraries (e.g., an OpenGL framework that may be used to render2D and 3D graphic content on a display), database libraries (e.g.,SQLite that may provide various relational database functions), weblibraries (e.g., WebKit that may provide web browsing functionality),and the like. The libraries 1116 may also include a wide variety ofother libraries 1138 to provide many other APIs to the applications 1120and other software components/modules.

The frameworks 1118 (also sometimes referred to as middleware) mayprovide a higher-level common infrastructure that may be utilized by theapplications 1120 or other software components/modules. For example, theframeworks 1118 may provide various graphic user interface (GUI)functions, high-level resource management, high-level location services,and so forth. The frameworks 1118 may provide a broad spectrum of otherAPIs that may be utilized by the applications 1120 or other softwarecomponents/modules, some of which may be specific to a particularoperating system or platform.

The applications 1120 include built-in applications 1140 or third partyapplications 1142. Examples of representative built-in applications 1140may include, but are not limited to, a contacts application, a browserapplication, a book reader application, a location application, a mediaapplication, a messaging application, an onion skin animation tool 1401,or a game application. The third-party applications 1142 may include anyof the built-in applications as well as a broad assortment of otherapplications. In a specific example, the third-party application 1142(e.g., an application developed using the Android™ or iOS™ softwaredevelopment kit (SDK) by an entity other than the vendor of theparticular platform) may be mobile software running on a mobileoperating system such as iOS™, Android™, Windows® Phone, or other mobileoperating systems. In this example, the third party application 1142 mayinvoke the API calls 1124 provided by the mobile operating system suchas the operating system 1114 to facilitate functionality describedherein.

The applications 1120 may utilize built in operating system functions(e.g., kernel 1128, services 1130 or drivers 1132), libraries (e.g.,system libraries 1134, API libraries 1136, and other libraries 1138),and frameworks/middleware 1118 to create user interfaces to interactwith users of the system. Alternatively, or additionally, in somesystems interactions with a user may occur through a presentation layer,such as the presentation layer 1144. In these systems, theapplication/module “logic” can be separated from the aspects of theapplication/module that interact with a user.

Some software architectures utilize virtual machines. In the example ofFIG. 11, this is illustrated by a virtual machine 1148. A virtualmachine creates a software environment where applications/modules canexecute as if they were executing on a hardware machine (such as themachine 1500 of FIG. 12, for example). A virtual machine is hosted by ahost operating system (operating system 1114 in FIG. 11) and typically,although not always, has a virtual machine monitor 1146, which managesthe operation of the virtual machine 1148 as well as the interface withthe host operating system (i.e., operating system 1114). A softwarearchitecture executes within the virtual machine 1148 such as anoperating system 1150, libraries 1152, frameworks/middleware 1154,applications 1156, or presentation layer 1158. These layers of softwarearchitecture executing within the virtual machine 1148 can be the sameas corresponding layers previously described or may be different.

In the example embodiment, the VR engine 1401 operates as an applicationin the applications 1120 layer. However, in some embodiments, the VRengine 1401 may operate in other software layers, in multiple softwarelayers (e.g., framework/middleware 1118 and applications 1120), or inany architecture that enables the systems and methods as describedherein. The VR engine 1401 may be similar to the VR engine 212.

FIG. 12 is a block diagram illustrating components of a machine 1200,according to some example embodiments, able to read instructions from amachine-readable medium 1138 (e.g., a machine-readable storage medium)and perform any one or more of the VR methodologies discussed herein.Specifically, FIG. 12 shows a diagrammatic representation of the machine1200 in the example form of a computer system, within which instructions1216 (e.g., software, a program, an application, an applet, an app, orother executable code) for causing the machine 1200 to perform any oneor more of the methodologies discussed herein may be executed. Forexample the instructions may cause the machine to execute the flowdiagrams of FIG. 10. The instructions transform the general,non-programmed machine into a particular machine programmed to carry outthe described and illustrated functions in the manner described. Inalternative embodiments, the machine 1200 operates as a standalonedevice or may be coupled (e.g., networked) to other machines. In anetworked deployment, the machine 1200 may operate in the capacity of aserver machine or a client machine in a server-client networkenvironment, or as a peer machine in a peer-to-peer (or distributed)network environment. The machine 1200 may comprise, but not be limitedto, a server computer, a client computer, a personal computer (PC), atablet computer, a laptop computer, a netbook, a set-top box (STB), apersonal digital assistant (PDA), an entertainment media system, acellular telephone, a smart phone, a mobile device, a wearable device(e.g., a smart watch), a smart home device (e.g., a smart appliance),other smart devices, a web appliance, a network router, a networkswitch, a network bridge, or any machine capable of executing theinstructions 1216, sequentially or otherwise, that specify actions to betaken by the machine 1200. Further, while only a single machine 1200 isillustrated, the term “machine” shall also be taken to include acollection of machines 1200 that individually or jointly execute theinstructions 1216 to perform any one or more of the methodologiesdiscussed herein.

The machine 1200 may include processors 1210, memory 1230, and I/Ocomponents 1250, which may be configured to communicate with each othersuch as via a bus 1202. In an example embodiment, the processors 1210(e.g., a Central Processing Unit (CPU), a Reduced Instruction SetComputing (RISC) processor, a Complex Instruction Set Computing (CISC)processor, a Graphics Processing Unit (GPU), a Digital Signal Processor(DSP), an Application Specific Integrated Circuit (ASIC), aRadio-Frequency Integrated Circuit (RFIC), another processor, or anysuitable combination thereof) may include, for example, a processor 1212and a processor 1214 that may execute the instructions 1216. The term“processor” is intended to include a multi-core processor that maycomprise two or more independent processors (sometimes referred to as“cores”) that may execute instructions contemporaneously. Although FIG.12 shows multiple processors, the machine 1200 may include a singleprocessor with a single core, a single processor with multiple cores(e.g., a multi-core processor), multiple processors with a single core,multiple processors with multiples cores, or any combination thereof.

The memory/storage 1230 may include a memory 1232, such as a mainmemory, or other memory storage, and a storage unit 1236, bothaccessible to the processors 1210 such as via the bus 1202. The storageunit 1236 and memory 1232 store the instructions 1216 embodying any oneor more of the methodologies or functions described herein. Theinstructions 1216 may also reside, completely or partially, within thememory 1232, within the storage unit 1236, within at least one of theprocessors 1210 (e.g., within the processor's cache memory), or anysuitable combination thereof, during execution thereof by the machine1200. Accordingly, the memory 1232, the storage unit 1236, and thememory of the processors 1210 are examples of machine-readable media.

As used herein, “machine-readable medium” means a device able to storeinstructions and data temporarily or permanently and may include, but isnot, limited to, random-access memory (RAM), read-only memory (ROM),buffer memory, flash memory, optical media, magnetic media, cachememory, other types of storage (e.g., Erasable Programmable Read-OnlyMemory (EEPROM)) or any suitable combination thereof. The term“machine-readable medium” should be taken to include a single medium ormultiple media (e.g., a centralized or distributed database, orassociated caches and servers) able to store the instructions 1216. Theterm “machine-readable medium” shall also be taken to include anymedium, or combination of multiple media, that is capable of storinginstructions (e.g., instructions 1216) for execution by a machine (e.g.,machine 1200), such that the instructions, when executed by one or moreprocessors of the machine 1200 (e.g., processors 1210), cause themachine 1200 to perform any one or more of the methodologies describedherein. Accordingly, a “machine-readable medium” refers to a singlestorage apparatus or device, as well as “cloud-based” storage systems orstorage networks that include multiple storage apparatus or devices. Theterm “machine-readable medium” excludes transitory signals per se.

The I/O components 1250 may include a wide variety of components toreceive input, provide output, produce output, transmit information,exchange information, capture measurements, and so on. The specific I/Ocomponents 1250 that are included in a particular machine will depend onthe type of machine. For example, portable machines such as mobilephones will likely include a touch input device or other such inputmechanisms, while a headless server machine will likely not include sucha touch input device. It will be appreciated that the I/O components1250 may include many other components that are not shown in FIG. 12.The I/O components 1250 are grouped according to functionality merelyfor simplifying the following discussion and the grouping is in no waylimiting. In various example embodiments, the I/O components 1250 mayinclude output components 1252 and input components 1254. The outputcomponents 1252 may include visual components (e.g., displays such as aplasma display panel (PDP), a light emitting diode (LED) display, aliquid crystal display (LCD), a projector, a cathode ray tube (CRT), orwearable devices such as head-mounted display (HMD) devices), acousticcomponents (e.g., speakers), haptic components (e.g., a vibratory motor,resistance mechanisms), other signal generators, and so forth. The inputcomponents 1254 may include alphanumeric input components (e.g., akeyboard, a touch screen configured to receive alphanumeric input, aphoto-optical keyboard, or other alphanumeric input components),point-based input components (e.g., a mouse, a touchpad, a trackball, ajoystick, a motion sensor, or other pointing instruments), tactile inputcomponents (e.g., a physical button, a touch screen that provideslocation or force of touches or touch gestures, or other tactile inputcomponents), motion-sensing input components (e.g., hand controllers),audio input components (e.g., a microphone), and the like.

In further example embodiments, the I/O components 1250 may includebiometric components 1256, motion components 1258, environmentalcomponents 1260, or position components 1262 among a wide array of othercomponents. For example, the biometric components 1256 may includecomponents to detect expressions (e.g., hand expressions, facialexpressions, vocal expressions, body gestures, or eye tracking), measurebiosignals (e.g., blood pressure, heart rate, body temperature,perspiration, or brain waves), identify a person (e.g., voiceidentification, retinal identification, facial identification,fingerprint identification, or electroencephalogram basedidentification), and the like. The motion components 1258 may includeacceleration sensor components (e.g., accelerometer), gravitation sensorcomponents, rotation sensor components (e.g., gyroscope),position-sensing components, and so forth. The environmental components1260 may include, for example, illumination sensor components (e.g.,photometer), temperature sensor components (e.g., one or morethermometer that detect ambient temperature), humidity sensorcomponents, pressure sensor components (e.g., barometer), acousticsensor components (e.g., one or more microphones that detect backgroundnoise), proximity sensor components (e.g., infrared sensors that detectnearby objects), gas sensors (e.g., gas detection sensors to detectionconcentrations of hazardous gases for safety or to measure pollutants inthe atmosphere), or other components that may provide indications,measurements, or signals corresponding to a surrounding physicalenvironment. The position components 1262 may include location sensorcomponents (e.g., a Global Position System (GPS) receiver component),altitude sensor components (e.g., altimeters or barometers that detectair pressure from which altitude may be derived), orientation sensorcomponents (e.g., magnetometers), and the like.

Communication may be implemented using a wide variety of technologies.The I/O components 1250 may include communication components 1264operable to couple the machine 1200 to a network 1280 or devices 1270via a coupling 1282 and a coupling 1272 respectively. For example, thecommunication components 1264 may include a network interface componentor other suitable device to interface with the network 1280. In furtherexamples, the communication components 1264 may include wiredcommunication components, wireless communication components, cellularcommunication components, Near Field Communication (NFC) components,Bluetooth® components (e.g., Bluetooth® Low Energy), Wi-Fi® components,and other communication components to provide communication via othermodalities. The devices 1270 may be another machine or any of a widevariety of peripheral devices (e.g., a peripheral device coupled via aUniversal Serial Bus (USB)).

In various example embodiments, one or more portions of the network 1280may be an ad hoc network, an intranet, an extranet, a virtual privatenetwork (VPN), a local area network (LAN), a wireless LAN (WLAN), a widearea network (WAN), a wireless WAN (WWAN), a metropolitan area network(MAN), the Internet, a portion of the Internet, a portion of the PublicSwitched Telephone Network (PSTN), a plain old telephone service (POTS)network, a cellular telephone network, a wireless network, a Wi-Fi®network, another type of network, or a combination of two or more suchnetworks. For example, the network 1280 or a portion of the network 1280may include a wireless or cellular network and the coupling 1282 may bea Code Division Multiple Access (CDMA) connection, a Global System forMobile communications (GSM) connection, or another type of cellular orwireless coupling. In this example, the coupling 1282 may implement anyof a variety of types of data transfer technology, such as SingleCarrier Radio Transmission Technology (1×RTT), Evolution-Data Optimized(EVDO) technology, General Packet Radio Service (GPRS) technology,Enhanced Data rates for GSM Evolution (EDGE) technology, thirdGeneration Partnership Project (3GPP) including 3G, fourth generationwireless (4G) networks, Universal Mobile Telecommunications System(UMTS), High Speed Packet Access (HSPA), Worldwide Interoperability forMicrowave Access (WiMAX), Long Term Evolution (LTE) standard, othersdefined by various standard-setting organizations, other long rangeprotocols, or other data transfer technology.

The instructions 1216 may be transmitted or received over the network1280 using a transmission medium via a network interface device (e.g., anetwork interface component included in the communication components1264) and utilizing any one of a number of well-known transfer protocols(e.g., hypertext transfer protocol (HTTP)). Similarly, the instructions1216 may be transmitted or received using a transmission medium via thecoupling 1272 (e.g., a peer-to-peer coupling) to the devices 1270. Theterm “transmission medium” shall be taken to include any intangiblemedium that is capable of storing, encoding, or carrying theinstructions 1216 for execution by the machine 1200, and includesdigital or analog communications signals or other intangible media tofacilitate communication of such software.

Throughout this specification, plural instances may implementcomponents, operations, or structures described as a single instance.Although individual operations of one or more methods are illustratedand described as separate operations, one or more of the individualoperations may be performed concurrently, and nothing requires that theoperations be performed in the order illustrated. Structures andfunctionality presented as separate components in example configurationsmay be implemented as a combined structure or component. Similarly,structures and functionality presented as a single component may beimplemented as separate components. These and other variations,modifications, additions, and improvements fall within the scope of thesubject matter herein.

Although an overview of the inventive subject matter has been describedwith reference to specific example embodiments, various modificationsand changes may be made to these embodiments without departing from thebroader scope of embodiments of the present disclosure. Such embodimentsof the inventive subject matter may be referred to herein, individuallyor collectively, by the term “invention” merely for convenience andwithout intending to voluntarily limit the scope of this application toany single disclosure or inventive concept if more than one is, in fact,disclosed.

The embodiments illustrated herein are described in sufficient detail toenable those skilled in the art to practice the teachings disclosed.Other embodiments may be used and derived therefrom, such thatstructural and logical substitutions and changes may be made withoutdeparting from the scope of this disclosure. The Detailed Description,therefore, is not to be taken in a limiting sense, and the scope ofvarious embodiments is defined only by the appended claims, along withthe full range of equivalents to which such claims are entitled.

As used herein, the term “or” may be construed in either an inclusive orexclusive sense. Moreover, plural instances may be provided forresources, operations, or structures described herein as a singleinstance. Additionally, boundaries between various resources,operations, modules, engines, and data stores are somewhat arbitrary,and particular operations are illustrated in a context of specificillustrative configurations. Other allocations of functionality areenvisioned and may fall within a scope of various embodiments of thepresent disclosure. In general, structures and functionality presentedas separate resources in the example configurations may be implementedas a combined structure or resource. Similarly, structures andfunctionality presented as a single resource may be implemented asseparate resources. These and other variations, modifications,additions, and improvements fall within a scope of embodiments of thepresent disclosure as represented by the appended claims. Thespecification and drawings are, accordingly, to be regarded in anillustrative rather than a restrictive sense.

What is claimed is:
 1. A system comprising: one or more hardwareprocessors; a head mounted display (HMD) configured to display a virtualenvironment to a user wearing the HMD; an input device configured toallow the user to interact with virtual objects presented in the virtualenvironment; and an onion skin animation module, executable by the oneor more hardware processors, configured to perform operationscomprising: receiving a character rig of a three-dimensional (3D)character; receiving a first 3D animation of the 3D character, the first3D animation defines a motion sequence of the 3D character based atleast in part on the character rig; creating a virtual time bar withinthe virtual environment, the virtual time bar displaying a timelineassociated with the first 3D animation; identifying a first animationtime within the first 3D animation, the first animation time is a pointin time during the motion sequence; creating a first pose object of the3D character in the virtual environment; posing the first pose object inthe virtual environment based on the first 3D animation at the animationtime; positioning the first pose object within the virtual environmentproximate the first animation time on the virtual time bar; positioninga second pose object proximate a second animation time on the virtualtime bar, the second pose object is in a pose different than the firstpose object; receiving indication of a compression gesture performed bythe user in the virtual environment using the input device, thecompression gesture identifies the first animation time and the secondanimation time; and reducing the first pose object and the second poseobject into a single, compressed pose object within the virtualenvironment, the compressed pose object displays at least a differencebetween the pose of the first pose object and the pose of the secondpose object.
 2. The system of claim 1, wherein the onion skin animationmodule is further configured to perform operations further comprising:receiving indication of a movement operation associated with the firstpose object, the movement operation is performed by the user in thevirtual environment, the move operation includes the user moving acomponent of the first pose object; and automatically altering a pose ofa second pose object within the virtual environment based at least inpart on the movement operation.
 3. The system of claim 1, wherein theonion skin animation module is further configured to perform operationsfurther comprising: receiving indication of a scrolling gestureperformed by the user in the virtual environment using the input device,the scrolling gesture includes (1) one of (a) grabbing the first poseobject and (b) pressing a point on the time bar and (2) gesturing to oneof the left and the right with the input device; simultaneously movingthe first pose object and the time bar to the one of the left and theright.
 4. The system of claim 1, wherein the onion skin animation moduleis further configured to perform operations further comprising:receiving indication of an animation extension gesture performed by theuser in the virtual environment using the input device, the animationextension gesture includes grabbing the first pose object and gesturingto one of the left and the right with the input device; and creating asecond pose object within the virtual environment in response to theanimation extension gesture.
 5. The system of claim 1, wherein the onionskin animation module is further configured to perform operationsfurther comprising: generating a modified 3D animation based at least inpart on the first pose object, the modified 3D animation is differentthan the first 3D animation.
 6. The system of claim 1, wherein the onionskin animation module is further configured to perform operationsfurther comprising: determining a second animation time based on thefirst animation time and a pre-determined animation increment; creatinga second pose object of the 3D character in the virtual environment; andpositioning the second pose object within the virtual environmentproximate the second animation time on the virtual time bar.
 7. Acomputer-implemented method comprising: receiving a character rig of athree-dimensional (3D) character; receiving a first 3D animation of the3D character, the first 3D animation defines a motion sequence of the 3Dcharacter based at least in part on the character rig; creating avirtual time bar within a virtual environment, the virtual time bardisplaying a timeline associated with the first 3D animation, thevirtual environment is displayed to a user wearing a head mounteddisplay (HMD); identifying a first animation time within the first 3Danimation, the first animation time is a point in time during the motionsequence; creating a first pose object of the 3D character in thevirtual environment; posing the first pose object in the virtualenvironment based on the first 3D animation at the animation time;positioning the first pose object within the virtual environmentproximate the first animation time on the virtual time bar; positioninga second pose object proximate a second animation time on the virtualtime bar, the second pose object is in a pose different than the firstpose object; receiving indication of a compression gesture performed bythe user in the virtual environment using the input device, thecompression gesture identifies the first animation time and the secondanimation time; and reducing the first pose object and the second poseobject into a single, compressed pose object within the virtualenvironment, the compressed pose object displays at least a differencebetween the pose of the first pose object and the pose of the secondpose object.
 8. The method of claim 7, further comprising: receivingindication of a movement operation associated with the first poseobject, the movement operation is performed by the user in the virtualenvironment, the move operation includes the user moving a component ofthe first pose object; and automatically altering a pose of a secondpose object within the virtual environment based at least in part on themovement operation.
 9. The method of claim 7, further comprising:receiving indication of a scrolling gesture performed by the user in thevirtual environment using an input device, the scrolling gestureincludes (1) one of (a) grabbing the first pose object and (b) pressinga point on the time bar and (2) gesturing to one of the left and theright with the input device, the input device is configured to allow theuser to interact with virtual objects presented in the virtualenvironment; and simultaneously moving the first pose object and thetime bar to the one of the left and the right.
 10. The method of claim7, further comprising: receiving indication of an animation extensiongesture performed by the user in the virtual environment using an inputdevice, the animation extension gesture includes grabbing the first poseobject and gesturing to one of the left and the right with the inputdevice, the input device is configured to allow the user to interactwith virtual objects presented in the virtual environment; and creatinga second pose object within the virtual environment in response to theanimation extension gesture.
 11. The method of claim 7, furthercomprising: generating a modified 3D animation based at least in part onthe first pose object, the modified 3D animation is different than thefirst 3D animation.
 12. The method of claim 7, further comprising:determining a second animation time based on the first animation timeand a pre-determined animation increment; creating a second pose objectof the 3D character in the virtual environment; and positioning thesecond pose object within the virtual environment proximate the secondanimation time on the virtual time bar.
 13. A non-transitorymachine-readable medium storing processor-executable instructions which,when executed by a processor, cause the processor to: receive acharacter rig of a three-dimensional (3D) character; receive a first 3Danimation of the 3D character, the first 3D animation defines a motionsequence of the 3D character based at least in part on the characterrig; create a virtual time bar within a virtual environment, the virtualtime bar displaying a timeline associated with the first 3D animation,the virtual environment is displayed to a user wearing a head mounteddisplay (HMD); identify a first animation time within the first 3Danimation, the first animation time is a point in time during the motionsequence; create a first pose object of the 3D character in the virtualenvironment; pose the first pose object in the virtual environment basedon the first 3D animation at the animation time; position the first poseobject within the virtual environment proximate the first animation timeon the virtual time bar; position a second pose object proximate asecond animation time on the virtual time bar, the second pose object isin a pose different than the first pose object; receive indication of acompression gesture performed by the user in the virtual environmentusing the input device, the compression gesture identifies the firstanimation time and the second animation time; and reduce the first poseobject and the second pose object into a single, compressed pose objectwithin the virtual environment, the compressed pose object displays atleast a difference between the pose of the first pose object and thepose of the second pose object.
 14. The machine-readable medium of claim13, wherein the processor-executable instructions further cause theprocessor to: receive indication of a movement operation associated withthe first pose object, the movement operation is performed by the userin the virtual environment, the move operation includes the user movinga component of the first pose object; and automatically alter a pose ofa second pose object within the virtual environment based at least inpart on the movement operation.
 15. The machine-readable medium of claim13, wherein the processor-executable instructions further cause theprocessor to: receive indication of a scrolling gesture performed by theuser in the virtual environment using an input device, the scrollinggesture includes (1) one of (a) grabbing the first pose object and (b)pressing a point on the time bar and (2) gesturing to one of the leftand the right with the input device, the input device is configured toallow the user to interact with virtual objects presented in the virtualenvironment; simultaneously move the first pose object and the time barto the one of the left and the right.
 16. The machine-readable medium ofclaim 13, wherein the processor-executable instructions further causethe processor to: receive indication of an animation extension gestureperformed by the user in the virtual environment using an input device,the animation extension gesture includes grabbing the first pose objectand gesturing to one of the left and the right with the input device,the input device is configured to allow the user to interact withvirtual objects presented in the virtual environment; and create asecond pose object within the virtual environment in response to theanimation extension gesture.
 17. The machine-readable medium of claim13, wherein the processor-executable instructions further cause theprocessor to: generate a modified 3D animation based at least in part onthe first pose object, the modified 3D animation is different than thefirst 3D animation.
 18. The machine-readable medium of claim 13, whereinthe processor-executable instructions further cause the processor to:determine a second animation time based on the first animation time anda pre-determined animation increment; create a second pose object of the3D character in the virtual environment; and position the second poseobject within the virtual environment proximate the second animationtime on the virtual time bar.